package coint.btc.util;

import org.springframework.ui.ModelMap;

import coint.btc.vo.Page;


/**
 * 统一返回的json封装类
 *
 * @author BOOM
 */
public class WriteJson {

    /**
     * 返回json数据基础模板
     *
     * @param success web端数据状态码
     *                true/false
     * @param status
     * @param msg     成功需返回的消息内容
     * @param error   失败时需返回的消息内容
     * @param data    需返回的数据
     * @param total   需返回的条目数
     * @return ModelMap
     * @author BOOM
     */
    private static ModelMap jsonMsg(Boolean success, Integer code, Integer status, String successmsg, String errormsg, Object data, Object total) {
        ModelMap map = new ModelMap();
        map.addAttribute("success", success);
        map.addAttribute("status", status);
        map.addAttribute("code", code);
        map.addAttribute("msg", successmsg);
        map.addAttribute("MSG", successmsg);
        map.addAttribute("error", errormsg);
        map.addAttribute("data", data);
        map.addAttribute("rows", data);
        map.addAttribute("total", total);
        return map;
    }

    /**
     * WEB端使用
     * 返回成功信息
     *
     * @param successmsg 消息内容
     * @return ModelMap
     * @author BOOM
     */
    public static ModelMap successMsg(String successmsg) {
        return jsonMsg(true, HttpStatus.OK.value(), 0, successmsg, null, null, 0);
    }

    /**
     * WEB端使用
     * 返回成功信息与数据
     *
     * @param successmsg 消息内容
     * @param data       数据内容
     * @return ModelMap
     * @author BOOM
     */
    public static ModelMap successDataMsg(String successmsg, Object data) {
        return jsonMsg(true, HttpStatus.OK.value(), 0, successmsg, null, data, 0);
    }

    /**
     * WEB端使用
     * 返回成功数据
     *
     * @param data 数据内容
     * @return ModelMap
     * @author BOOM
     */
    public static ModelMap successData(Object data) {
        return jsonMsg(true, HttpStatus.OK.value(), 0, null, null, data, 0);
    }

    /**
     * WEB端使用
     * 返回成功消息与分页数据
     *
     * @param successmsg 消息内容
     * @param data       数据内容
     * @param total      分页总条目数
     * @return ModelMap
     * @author BOOM
     */
    public static ModelMap successPageDataMsg(String successmsg, Object data, Object total) {
        return jsonMsg(true, HttpStatus.OK.value(), 0, successmsg, null, data, total);
    }

    /**
     * WEB端使用
     * 返回分页信息数据
     *
     * @param data  数据内容
     * @param total 分页总条目数
     * @return ModelMap
     * @author BOOM
     */
    public static ModelMap successPageData(Object data, Object total) {
        return jsonMsg(true, HttpStatus.OK.value(), 0, null, null, data, total);
    }
    
    /**
     * 返回分页信息
     * @param page
     * @return
     */
    public static <T> ModelMap successPageData(Page<T> page) {
    	return jsonMsg(true, HttpStatus.OK.value(), 0, null, null, page.getResults(), page.getTotal());
    }

    /**
     * WEB端使用
     * 失败时返回的消息内容
     *
     * @param successmsg 失败消息内容
     * @return ModelMap
     * @author BOOM
     */
    public static ModelMap errorWebMsg(HttpStatus http, String errormsg) {
        return jsonMsg(false, http.value(), -1, null, errormsg, null, 0);
    }
    
    /**
     * 调用失败返回异常信息
     * @param http
     * @param errormsg
     * @param data
     * @return
     */
    public static ModelMap errorWebDataMsg(HttpStatus http, String errormsg, String data) {
        return jsonMsg(false, http.value(), -1, null, errormsg, data, 0);
    }
}